﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using CRC.GestionSalones.Controladores;
using CRC.Comun.Presentacion;

namespace CRC.GestionSalones.Presentacion
{
    public partial class ModificarCongregacion : UsrCongregacion
    {
        private IControladorCongregacion iCC = null;
        private String strNombreCRC = String.Empty;

        public ModificarCongregacion()
        {
            InitializeComponent();
        }

        public ModificarCongregacion(IControladorCongregacion pIcc, String pStrNombreCRC)
            : this()
        {
            this.iCC = pIcc;
            this.strNombreCRC = pStrNombreCRC;
            Object[] datosCongregacion = this.iCC.obtenerDatosCongregacion(pStrNombreCRC);
            txtNumero.Text = datosCongregacion[0].ToString();
            txtNombreCRC.Text = (String)datosCongregacion[1];
            txtNombreSucursal.Text = (String)datosCongregacion[2];
            chkEsAnfitriona.Checked = (Boolean)datosCongregacion[3];

            if (!String.IsNullOrEmpty((String)datosCongregacion[4]))
            {
                txtPresidente.Text = (String)datosCongregacion[4];
                butEditarDatosPresidente.Visible = true;
            }

            if (!String.IsNullOrEmpty((String)datosCongregacion[5]))
            {
                txtSecretario.Text = (String)datosCongregacion[5];
                butEditarDatosSecretario.Visible = true;
            }

            if (!String.IsNullOrEmpty((String)datosCongregacion[6]))
            {
                txtSuperintendente.Text = (String)datosCongregacion[6];
                butEditarDatosSupCircuito.Visible = true;
            }

            txtObservacions.Text = (String)datosCongregacion[7];
        }
        
        protected override void butEditarDatosSupCircuito_Click(object sender, EventArgs e)
        {
            ModificarSupCircuito modificarSuperCircuito = new ModificarSupCircuito(this.iCC);
            modificarSuperCircuito.StartPosition = FormStartPosition.CenterParent;
            if (modificarSuperCircuito.ShowDialog() == DialogResult.OK) 
            {
                txtSuperintendente.Text = modificarSuperCircuito.txtNombre.Text.Trim() + " " + modificarSuperCircuito.txtApellido1.Text.Trim();
            }
        }

        protected override void butEditarDatosPresidente_Click(object sender, EventArgs e)
        {
            ModificarPresidente modificarPresidente = new ModificarPresidente(this.iCC);
            modificarPresidente.StartPosition = FormStartPosition.CenterParent;
            if (modificarPresidente.ShowDialog() == DialogResult.OK)
            {
                txtPresidente.Text = modificarPresidente.txtNombre.Text.Trim() + " " + modificarPresidente.txtApellido1.Text.Trim();
            }
        }

        protected override void butEditarDatosSecretario_Click(object sender, EventArgs e)
        {
            ModificarSecretario modificarSecretario = new ModificarSecretario(this.iCC);
            modificarSecretario.StartPosition = FormStartPosition.CenterParent;
            if (modificarSecretario.ShowDialog() == DialogResult.OK)
            {
                txtSecretario.Text = modificarSecretario.txtNombre.Text.Trim() + " " + modificarSecretario.txtApellido1.Text.Trim();
            }
        }

        protected override void butAñadirPresidente_Click(object sender, EventArgs e)
        {
            AltaPresidente altaPresidente = new AltaPresidente(this.iCC);
            if (altaPresidente.ShowDialog() == DialogResult.OK)
            {
                txtPresidente.Text = altaPresidente.txtNombre.Text.Trim() + " " + altaPresidente.txtApellido1.Text.Trim();
                butAñadirPresidente.Enabled = false;
                butEditarDatosPresidente.Visible = true;

            }
        }

        protected override void butAñadirSecretario_Click(object sender, EventArgs e)
        {
            AltaSecretario altaSecretario = new AltaSecretario(this.iCC);
            if (altaSecretario.ShowDialog() == DialogResult.OK)
            {
                txtSecretario.Text = altaSecretario.txtNombre.Text.Trim() + " " + altaSecretario.txtApellido1.Text.Trim();
                butAñadirSecretario.Enabled = false;
                butEditarDatosSecretario.Visible = true;

            }
        }

        protected override void butExaminarPresidentes_Click(object sender, EventArgs e)
        {
            ExaminarSupPresidentes examinarPresidentes = new ExaminarSupPresidentes();
            examinarPresidentes.StartPosition = FormStartPosition.CenterParent;
            if (examinarPresidentes.ShowDialog() == DialogResult.OK)
            {
                int intPresidente = (int)examinarPresidentes.cmbPersonas.SelectedKey;
                iCC.asignarPresidente(intPresidente);
                txtPresidente.Text = (String)examinarPresidentes.cmbPersonas.SelectedItem;
                butEditarDatosPresidente.Visible = true;
            }
        }

        protected override void butExaminarSecretarios_Click(object sender, EventArgs e)
        {
            ExaminarSecretarios examinarSecretarios = new ExaminarSecretarios();
            examinarSecretarios.StartPosition = FormStartPosition.CenterParent;
            if (examinarSecretarios.ShowDialog() == DialogResult.OK)
            {
                int intPresidente = (int)examinarSecretarios.cmbPersonas.SelectedKey;
                iCC.asignarSecretario(intPresidente);
                txtSecretario.Text = (String)examinarSecretarios.cmbPersonas.SelectedItem;
                butEditarDatosSecretario.Visible = true;
            }
        }

        protected override void butExaminarSupCircuito_Click(object sender, EventArgs e)
        {
            ExaminarSupCircuitos examinarSupCircuitos = new ExaminarSupCircuitos();
            examinarSupCircuitos.StartPosition = FormStartPosition.CenterParent;
            if (examinarSupCircuitos.ShowDialog() == DialogResult.OK)
            {
                int intSupCircuito = (int)examinarSupCircuitos.cmbPersonas.SelectedKey;
                iCC.asignarSuperintendenteCircuito(intSupCircuito);
                txtSuperintendente.Text = (String)examinarSupCircuitos.cmbPersonas.SelectedItem;
                butEditarDatosSupCircuito.Visible = true;
            }
        }

        protected override void butAñadirCongregacion_Click(object sender, EventArgs e)
        {
            if (txtNumero.Text.Trim().Length == 0 ||
                txtNombreCRC.Text.Trim().Length == 0)
            {
                MessageBox.Show(
                    "Campos obligatorios por cumplimentar",
                    "Advertencia",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Warning,
                    MessageBoxDefaultButton.Button1
                );
            }
            else
            {
                try
                {
                    iCC.modificarCongregacion(
                        int.Parse(txtNumero.Text.Trim()), 
                        txtNombreCRC.Text.Trim(), 
                        txtNombreSucursal.Text.Trim(), 
                        chkEsAnfitriona.Checked, 
                        txtObservacions.Text.Trim()
                     ); 

                    //notificar congregacion añadida
                    foreach (EscuchadorDeListado escuchadorDeListado in escuchadoresDeListado)
                    {
                        escuchadorDeListado.notificarCambio(
                            this,
                            "modificar.congregacion",
                            new Object[] {
                                int.Parse(txtNumero.Text.Trim()), 
                                txtNombreCRC.Text.Trim(),
                                chkEsAnfitriona.Checked,
                                strNombreCRC
                            }
                        );
                    }

                    this.Dispose();
                }
                catch (FormatException fe)
                {
                    txtNumero.Focus();
                    txtNumero.SelectAll();

                    MessageBox.Show(
                        "Número de congregación incorrecto.",
                        "Advertencia",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Warning,
                        MessageBoxDefaultButton.Button1
                    );
                }
                catch (ApplicationException aEx)
                {
                    MessageBox.Show(
                           aEx.Message,
                           "Advertencia",
                           MessageBoxButtons.OK,
                           MessageBoxIcon.Warning,
                           MessageBoxDefaultButton.Button1
                     );
                }
                catch (Exception ex)
                {
                    MessageBox.Show(
                           ex.Message,
                           "Error",
                           MessageBoxButtons.OK,
                           MessageBoxIcon.Error,
                           MessageBoxDefaultButton.Button1
                     );
                    this.Dispose();
                }
            }
        }

        private void butClose_Click(object sender, EventArgs e)
        {
            base.butKO_Click(sender, e);
            iCC.limpiarEstado();
        }
    }
}
